//
//  Status.swift
//  sinaWeibo
//
//  Created by liii on 16/7/22.
//  Copyright © 2016年 liii. All rights reserved.
//

import UIKit
import AFNetworking
import SVProgressHUD

class Status: NSObject {

    // 属性
    var created_at: String?     // 微博创建时间
    var id: Int64 = 0           // 微博ID
    var text: String?           // 微博信息内容
    var source: String?         // 微博来源
    var user: User?             // 用户object
    
    // 字典转模型(相当于initWithDict:(NSDicionary *)dict)
    init(dict: [String: AnyObject]) {
        super.init()
        // 循环遍历所有键值, 同时调用setValue:forKey:给自定义对象的属性赋值
        setValuesForKeysWithDictionary(dict)
    }
    override func setValue(value: AnyObject?, forKey key: String) {
        // 对user做特殊处理
        if key == "user" {
            // 默认user为object类型, 需要转换为字典
            guard let dict = value as? [String : AnyObject] else {
                // 转换字典失败
                return
            }
            // 字典转模型
            user = User(dict: dict)
            // 防止user之下super的代码, 再次被转换为字典
            return
        }
        // 非"user"key, 即status的属性, 进行字典转模型
        super.setValue(value, forKey: key)
    }
    // 忽略不匹配key
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        return
    }
    // 重写description方法
    override var description: String {
        let keys = ["id", "text", "source", "created_at"]
        let dict = self.dictionaryWithValuesForKeys(keys)
        return dict.description
    }
}

// 网络请求
extension Status {
    
    // 请求网络数据
    class func loadHomeData(finished: (dict: [Status]?) -> ()) {
        
        guard let token = sharedUser.access_token else {
            print("用户未登陆, 或者token已过期")
            return
        }
        let urlString = "https://api.weibo.com/2/statuses/home_timeline.json"
        let parameters = ["access_token" : token]
        let afn = AFHTTPSessionManager()
        afn.responseSerializer.acceptableContentTypes?.insert("text/html")
        SVProgressHUD.show()
        afn.GET(urlString, parameters: parameters, success: { (_, result) -> Void in
            
            SVProgressHUD.dismiss()
            // 获取数据转换格式
            guard let dict = result as? [String : AnyObject] else {
                print("获取数据失败, 或数据格式错误!")
                finished(dict: nil)
                return
            }
            // 获取status字典
            guard let array = dict["statuses"] as? [[String : AnyObject]] else {
                print("数据格式错误")
                finished(dict: nil)
                return
            }
            // 临时数据
            var tempArray = [Status]()
            // 遍历status字典
            for item in array {
                // 字典转模型
                let s = Status(dict: item)
                tempArray.append(s)
            }
            // 回调数据
            finished(dict: tempArray)
            
            // 请求错误
            }) { (_, error) -> Void in
                print("请求出错:%@", error)
                finished(dict: nil)
        }
    }
    
}
